﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Bussiness;
using Data;
using System.IO;
using System.Text.RegularExpressions;

namespace hostal
{
    public partial class EditarCuenta : Form
    {
        private PaisDataAccess buscarPaises = new PaisDataAccess();
        public string usuario { get; set; }
        public string tipoUsuario;
        public bool cuentaActivaBoleano;
        private bool nombreIncorrecto, apellidoIncorrecto, numeroDocumentoIncorrecto, nombreUsuarioIncorrecto,numeroDocumentoExiste,fechaNacimientoIncorrecto = true;
        private string numeroDocumentoAntiguo,usuarioAntiguo;
        public EditarCuenta(DataTable dt,string usuario,string activo,string tipoCuenta,string tipoUsuario)
        {
            InitializeComponent();
            try
            {
                DGVerDetallePersonal.DataSource = buscarPaises.buscarPaises();
                /*for (int i = 0; i < DGVerDetallePersonal.RowCount - 1; i++)
                {
                    CBNacionalidad.Items.Add(DGVerDetallePersonal.Rows[i].Cells[0].Value);
                }*/
                manejadorPaises paises = new manejadorPaises();
                foreach (string country in paises.GetCountryList())
                {
                    CBNacionalidad.Items.Add(country);
                }
                DGVerDetallePersonal.DataSource = dt;
                TBNumeroDocumento.Text += DGVerDetallePersonal.Rows[0].Cells["numeroDocumento"].Value.ToString();
                numeroDocumentoAntiguo = TBNumeroDocumento.Text;
                TBNombre.Text += DGVerDetallePersonal.Rows[0].Cells["nombre"].Value.ToString();
                TBApellido.Text += DGVerDetallePersonal.Rows[0].Cells["apellido"].Value.ToString();
                CBNacionalidad.Text += DGVerDetallePersonal.Rows[0].Cells["paisNacimiento"].Value.ToString();
                CBSexo.Text = DGVerDetallePersonal.Rows[0].Cells["sexo"].Value.ToString();
                TBProfesion.Text += DGVerDetallePersonal.Rows[0].Cells["profesion"].Value.ToString();
                DTPFechaNacimiento.Text =  DGVerDetallePersonal.Rows[0].Cells["fechaNacimiento"].Value.ToString();
                TBEmail.Text += DGVerDetallePersonal.Rows[0].Cells["email"].Value.ToString();
                TBTelefono.Text += DGVerDetallePersonal.Rows[0].Cells["telefono"].Value.ToString();
                TBNotas.Text += DGVerDetallePersonal.Rows[0].Cells["notas"].Value.ToString();
                TBNombreUsuario.Text = usuario;
                CBTipoUsuario.Text = tipoCuenta;
                usuarioAntiguo = usuario;
                if (activo == "si")
                    CBCuentaActiva.Checked = true;
                if (tipoUsuario != "administrador")
                {
                    CBCuentaActiva.Hide();
                    CBTipoUsuario.Hide();
                    LBTipoCuenta.Hide();
                    CBCuentaActiva.Checked = true;
                }
                if (usuario == "administrador")
                {
                    BAceptar.Enabled = false;
                }
            }
            catch (ExecutionEngineException exp) { }
                
        }

        private void BCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void TBNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarLetraConEspacio(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBApellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarLetraConEspacio(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBNumeroDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarNumero(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBProfesion_KeyPress(object sender, KeyPressEventArgs e)
        {
        }

        private void TBEmail_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarCorreo(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarNumeroConComa(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void TBCelular_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarNumeroConComa(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void CBNacionalidad_KeyPress(object sender, KeyPressEventArgs e)
        {

        }

        private void TBNotas_KeyPress(object sender, KeyPressEventArgs e)
        {

        }

        private void CBSexo_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void BAceptar_Click(object sender, EventArgs e)
        {
            if (fechaNacimientoIncorrecto = DTPFechaNacimiento.Value > System.DateTime.Today.Date)
                EPFechaNacimiento.SetError(DTPFechaNacimiento, "La fecha de nacimiento no puede ser mayor o igual a la actual");
            else
                EPFechaNacimiento.Clear();
            if (nombreIncorrecto = Validador.campoVacio(TBNombre.Text))
                EPNombre.SetError(TBNombre, "Requerido");
            else
                EPNombre.Clear();
            if (apellidoIncorrecto = Validador.campoVacio(TBApellido.Text))
                EPApellido.SetError(TBApellido, "Requerido");
            else
                EPApellido.Clear();
            if (numeroDocumentoIncorrecto = Validador.campoVacio(TBNumeroDocumento.Text))
                EPNumeroDocumento.SetError(TBNumeroDocumento, "Requerido");
            else
                EPNumeroDocumento.Clear();
            if (!Validador.validarEmail(TBEmail.Text))
                EPEmail.SetError(TBEmail, "Formato Invalido (no es requerido)");
            else
                EPEmail.Clear();
            if (nombreUsuarioIncorrecto = Validador.campoVacio(TBNombreUsuario.Text))
                EPNombreUsuario.SetError(TBNombreUsuario, "Requerido");
            else
                EPNombreUsuario.Clear();
            CuentasDataAccess registroCuenta = new CuentasDataAccess();
            if(registroCuenta.buscarNumeroDocumento(TBNumeroDocumento.Text) && TBNumeroDocumento.Text!=numeroDocumentoAntiguo)
            {
                MessageBox.Show("El Numero De Documento Ya Existe");
                numeroDocumentoExiste=true;
            }
            else
                numeroDocumentoExiste=false;
            if (!registroCuenta.buscarUsuario(TBNombreUsuario.Text.Trim()) || TBNombreUsuario.Text == usuarioAntiguo)
            {
                if (!nombreIncorrecto && !apellidoIncorrecto && !numeroDocumentoIncorrecto && !nombreUsuarioIncorrecto && !numeroDocumentoExiste && !fechaNacimientoIncorrecto)
                {
                    string cuentaActiva = "no";
                    if (CBCuentaActiva.Checked)
                        cuentaActiva = "si";
                    TBNombre.Text = Regex.Replace(TBNombre.Text, @"\s+", " ");
                    TBApellido.Text = Regex.Replace(TBApellido.Text, @"\s+", " ");
                    PersonalDataAccess registroDatosPersonal = new PersonalDataAccess();
                    if (registroDatosPersonal.modificarDatosPersonal(numeroDocumentoAntiguo, TBNumeroDocumento.Text, TBNombre.Text.Trim(), TBApellido.Text.Trim(), CBNacionalidad.Text, CBSexo.Text, TBProfesion.Text, DTPFechaNacimiento.Text, TBEmail.Text, TBTelefono.Text, TBCelular.Text, TBNotas.Text))
                    {
                        registroCuenta.actualizarDatos(TBNumeroDocumento.Text, numeroDocumentoAntiguo, TBNombreUsuario.Text.Trim(), cuentaActiva,CBTipoUsuario.Text);
                        MessageBox.Show("Se Modifico Exitosamente");
                        DialogResult = DialogResult.OK;
                        usuario = TBNombreUsuario.Text;
                        tipoUsuario = CBTipoUsuario.Text;
                        cuentaActivaBoleano = CBCuentaActiva.Checked;
                        this.Close();
                    }
                    else
                        MessageBox.Show("No Se Pudo Modificar");
                }
            }
            else
                MessageBox.Show("Ese Usuario Ya Existe");
        }

        private void TBNombreUsuario_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Validador.validarLetraSinEspacio(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void BAgregarPais_Click(object sender, EventArgs e)
        {
            AgregarPais agregarPais = new AgregarPais();
            agregarPais.ShowDialog();
            dg.DataSource = buscarPaises.buscarPaises();
            CBNacionalidad.Items.Clear();
            for (int i = 0; i < dg.RowCount; i++)
            {
                CBNacionalidad.Items.Add(dg.Rows[i].Cells[0].Value);
            }
        }
    }
}
